/**
 * 计算给定日期字符串与当前日期之间的天数差。
 *
 * @param dateStr 一个符合ISO 8601标准的日期字符串，例如"2023-03-15T14:30:00.000Z"。
 * @returns 给定日期到当前日期的天数差。
 */
export function daysAgo(dateStr:string) {
    // 将日期字符串解析为自1970年1月1日以来的毫秒数。
    const givenDate = Date.parse(dateStr);
    // 获取当前日期和时间的毫秒数。
    const currentDate = Date.now();
    // 计算给定日期与当前日期之间的毫秒数差。
    const diff = currentDate - givenDate;
    // 将毫秒差转换为天数差并返回。
    return getDiffTime(diff)
}

/**
 * 将时间差转换为更易读的格式。
 * @param diff 时间差，单位为毫秒。
 * @returns 格式化后的时间差字符串，形式为"天小时分钟秒"。
 */
export function getDiffTime(diff: number): string {
    // 检查时间差是否为负数，如果是，则返回负数提示
    if (diff < 0) {
        return "时间差不能为负数";
    }

    // 将时间差转换为秒
    const subTime = diff / 1000;
    // 计算总天数
    const day = Math.floor(subTime / (60 * 60 * 24));
    // 计算小时数，减去总天数的小时部分以得到剩余小时数
    const hour = Math.floor(subTime / 3600) - 24 * day;
    // 计算分钟数
    const min = Math.floor(subTime % 3600 / 60);
    // 计算秒数
    const sec = Math.floor(subTime % 60);
    // 返回格式化后的时间差字符串
    if(day != 0){
        return day + "天" +addLeadingZero(hour) + "时" + addLeadingZero(min) + "分" + addLeadingZero(sec) + "秒";
    }
    if(hour != 0){
        return addLeadingZero(hour) + "时" + addLeadingZero(min) + "分" + addLeadingZero(sec) + "秒";
    }
    if(min != 0){
        return addLeadingZero(min) + "分" + addLeadingZero(sec) + "秒";
    }
    return addLeadingZero(sec) + "秒";
}

// 辅助函数：为数字添加前导零
function addLeadingZero(n: number): string {
    return n < 10 ? `0${n}` : `${n}`;
}

